﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.OracleClient;
using System.Data;
using System.Configuration;


namespace Datos
{
    public class TratamientoAD
    {   

        //inserta nuevo tratamiento
        public static int NuevoTratamiento(Tratamiento tratamiento)
        {
            OracleConnection oraConn = new OracleConnection();
            int k = 0;
            string connString = "Server=XE;Uid=juan;Pwd=lagartija";
            if (oraConn.State != ConnectionState.Open)
            {
                try
                {
                    oraConn.ConnectionString = connString;

                    oraConn.Open();

                    Console.WriteLine(oraConn.ConnectionString, "Successful Connection");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message, "Exception Caught");
                }
            }

            if (oraConn.State == ConnectionState.Open)
            {
                string sqlInsert = "insert into tratamiento ";
                sqlInsert += "values (SEQUENCE_TRATAMIENTO.NEXTVAL, :p_nombre_tratamiento, :p_detalle, :p_numerosesiones, :p_valor, :p_estado)";
             
                OracleCommand cmdInsert = new OracleCommand();
                cmdInsert.CommandText = sqlInsert;
                cmdInsert.Connection = oraConn;

                OracleParameter pNombreTratamiento = new OracleParameter();
                pNombreTratamiento.Value = tratamiento.Nombre_Tratamientoo;
                pNombreTratamiento.ParameterName = "p_nombre_tratamiento";

                OracleParameter pDetalle = new OracleParameter();
                pDetalle.Value = tratamiento.Detalle;
                pDetalle.ParameterName = "p_detalle";

                OracleParameter pNumeroSesiones = new OracleParameter();
                pNumeroSesiones.DbType = DbType.Int32;
                pNumeroSesiones.Value =  tratamiento.NumeroSesiones;
                pNumeroSesiones.ParameterName = "p_numerosesiones";

                OracleParameter pValor = new OracleParameter();
                pValor.DbType = DbType.Int32;
                pValor.Value = tratamiento.valor;
                pValor.ParameterName = "p_valor";

                OracleParameter pEstado = new OracleParameter();
                pEstado.Value = tratamiento.estado;
                pEstado.ParameterName = "p_estado";

               



                cmdInsert.Parameters.Add(pNombreTratamiento);
                cmdInsert.Parameters.Add(pDetalle);
                cmdInsert.Parameters.Add(pNumeroSesiones);
                cmdInsert.Parameters.Add(pValor);
                cmdInsert.Parameters.Add(pEstado);
               

                k = cmdInsert.ExecuteNonQuery();

                cmdInsert.Dispose();







            } return k;
        }

        //modifica tratamiento
        public static int ModificarTratamiento(Tratamiento tratamiento)
        {
            OracleConnection oraConn = new OracleConnection();
            int k = 0;
            string connString = "Server=XE;Uid=juan;Pwd=lagartija";
            if (oraConn.State != ConnectionState.Open)
            {
                try
                {
                    oraConn.ConnectionString = connString;

                    oraConn.Open();

                    Console.WriteLine(oraConn.ConnectionString, "Successful Connection");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message, "Exception Caught");
                }
            }

            if (oraConn.State == ConnectionState.Open)
            {



                string sqlUpdate = "UPDATE tratamiento ";
                sqlUpdate += "SET nombre_tratamiento = :p_nombre_tratamiento, ";
                sqlUpdate += "detalle = :p_detalle, ";
                sqlUpdate += "numerosesiones = :p_numerosesiones, ";
                sqlUpdate += "valor = :p_valor, ";
                sqlUpdate += "estado = :p_estado ";
                sqlUpdate += "WHERE id_tratamiento = :p_id_tratamiento";

                OracleCommand cmdUpdate = new OracleCommand();
                cmdUpdate.CommandText = sqlUpdate;
                cmdUpdate.Connection = oraConn;


                OracleParameter pNombreTratamiento = new OracleParameter();
                pNombreTratamiento.Value = tratamiento.Nombre_Tratamientoo;
                pNombreTratamiento.ParameterName = "p_nombre_tratamiento";

                OracleParameter pDetalle = new OracleParameter();
                pDetalle.Value = tratamiento.Detalle;
                pDetalle.ParameterName = "p_detalle";

                OracleParameter pNumeroSesiones = new OracleParameter();
                pNumeroSesiones.DbType = DbType.Int32;
                pNumeroSesiones.Value = tratamiento.NumeroSesiones;
                pNumeroSesiones.ParameterName = "p_numerosesiones";

                OracleParameter pValor = new OracleParameter();
                pValor.DbType = DbType.Int32;
                pValor.Value = tratamiento.valor;
                pValor.ParameterName = "p_valor";

                OracleParameter pEstado = new OracleParameter();
                pEstado.Value = tratamiento.estado;
                pEstado.ParameterName = "p_estado";

                OracleParameter pIdTratamiento = new OracleParameter();
                pIdTratamiento.DbType = DbType.Int32;
                pIdTratamiento.Value = tratamiento.ID_Tratamiento;
                pIdTratamiento.ParameterName = "p_id_tratamiento";





                cmdUpdate.Parameters.Add(pNombreTratamiento);
                cmdUpdate.Parameters.Add(pDetalle);
                cmdUpdate.Parameters.Add(pNumeroSesiones);
                cmdUpdate.Parameters.Add(pValor);
                cmdUpdate.Parameters.Add(pEstado);
                cmdUpdate.Parameters.Add(pIdTratamiento);
               

                k = cmdUpdate.ExecuteNonQuery();

                cmdUpdate.Dispose();

                return k;
            }
            return k;


        }

        //trae tratamientos en ejecucion asignados paciente
        public static List<Tratamiento> GetByRutPac(string rut)
        {
            string sql = @"SELECT tratamiento.id_tratamiento,
                                  tratamiento.nombre_tratamiento,
                                  tratamiento.detalle,
                                  tratamiento.numerosesiones,
                                  tratamiento.valor,
                                  tratamiento.estado
                             FROM tratamiento, presupuesto
                            WHERE presupuesto.rutpaciente = '" + rut + "' AND presupuesto.id_tratamiento = tratamiento.id_tratamiento AND presupuesto.estado = 'Ejecucion'";

            List<Tratamiento> list = new List<Tratamiento>();

            using (OracleConnection conn = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija"))
            {

                OracleCommand command = new OracleCommand(sql, conn);

                conn.Open();

                OracleDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    list.Add(LoadTratamiento(reader));
                }

                return list;
            }
        }
        

        //busca tratamiento por id
        public static Tratamiento GetByID(int ID_Tratamiento)
        {
            string sql = @"SELECT id_tratamiento, 
                                  nombre_tratamiento,
                                  detalle,
                                  numerosesiones,
                                  valor,
                                  estado
                           FROM   tratamiento
                           WHERE  id_tratamiento="+ID_Tratamiento+" ";

            Tratamiento tratamiento = null;
            try
            {
                OracleConnection Oraclecon = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija");
                Oraclecon.Open();
                OracleCommand myCMD = new OracleCommand();
                myCMD.Connection = Oraclecon;
                myCMD.CommandText = sql;
                myCMD.CommandType = CommandType.Text;

                OracleDataReader reader = myCMD.ExecuteReader();


                if (reader.Read())
                {
                    tratamiento = LoadTratamiento(reader);
                }
                Oraclecon.Close();
            }
            catch (Exception e)
            {
            }
            return tratamiento;

        }

        //busca tratamiento por nombre
        public static Tratamiento GetByNombre(string NombreTratamiento)
        {
            string sql = @"select PACIENTE.NOMBRE as NOMBRE,
	                     TPACIENTE = " + NombreTratamiento;

            Tratamiento tratamiento = null;

            OracleConnection Oraclecon = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija");
            Oraclecon.Open();
            OracleCommand myCMD = new OracleCommand();
            myCMD.Connection = Oraclecon;
            myCMD.CommandText = sql;
            myCMD.CommandType = CommandType.Text;

            OracleDataReader reader = myCMD.ExecuteReader();


            if (reader.Read())
            {
                tratamiento = LoadTratamiento(reader);
            }

            return tratamiento;

        }

        //todos los tratamientos 
        public static List<Tratamiento> GetAll()
        {
            string sql = @"SELECT id_tratamiento, 
                                  nombre_tratamiento,
                                  detalle,
                                  numerosesiones,
                                  valor,
                                  estado
                           FROM   tratamiento";

            List<Tratamiento> list = new List<Tratamiento>();

            using (OracleConnection conn = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija"))
            {

                OracleCommand command = new OracleCommand(sql, conn);

                conn.Open();

                OracleDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    list.Add(LoadTratamiento(reader));
                }

                return list;
            }

        }



        //todos los tratamientos activos
        public static List<Tratamiento> GetAllActivo()
        {
            string sql = @"SELECT id_tratamiento, 
                                  nombre_tratamiento,
                                  detalle,
                                  numerosesiones,
                                  valor,
                                  estado
                           FROM   tratamiento
                           WHERE  estado = 'Activo'";

            List<Tratamiento> list = new List<Tratamiento>();

            using (OracleConnection conn = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija"))
            {

                OracleCommand command = new OracleCommand(sql, conn);

                conn.Open();

                OracleDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    list.Add(LoadTratamiento(reader));
                }

                return list;
            }

        }

        //busca tratamiento donde el nombre contenga la cadena
        public static List<Tratamiento> GetByNombreCombo(string nombre)
        {
            string sql = @"SELECT id_tratamiento,
                                  nombre_tratamiento,
                                  detalle,
                                  numerosesiones,
                                  valor,
                                  estado
                             FROM tratamiento
                            WHERE nombre_tratamiento LIKE '%" + nombre+"%'";

            List<Tratamiento> list = new List<Tratamiento>();

            using (OracleConnection conn = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija"))
            {

                OracleCommand command = new OracleCommand(sql, conn);

                conn.Open();

                OracleDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    list.Add(LoadTratamiento(reader));
                }

                return list;
            }
        }

        //carga el tratamiento al objeto
        private static Tratamiento LoadTratamiento (IDataReader reader)
        {
            Tratamiento tratamiento = new Tratamiento();

            tratamiento.ID_Tratamiento = Convert.ToInt32(reader["id_tratamiento"]);
            tratamiento.Nombre_Tratamientoo = Convert.ToString(reader["nombre_tratamiento"]);
            tratamiento.Detalle = Convert.ToString(reader["detalle"]);
            tratamiento.NumeroSesiones = Convert.ToInt32(reader["numerosesiones"]);
            tratamiento.valor = Convert.ToInt32(reader["valor"]);
            tratamiento.estado= Convert.ToString(reader["estado"]);

            return tratamiento;
        }

        //verifica que no halla 2 tratamientos con el mismo nombre
        public static bool TratamientoMismoNombre(string nombre)
        {
            string sql = @"select	 *
	                        from   	 tratamiento 
	                        where    nombre_tratamiento = '" + nombre + "'";




            OracleConnection Oraclecon = new OracleConnection("Server=XE;Uid=juan;Pwd=lagartija");
            Oraclecon.Open();
            OracleCommand myCMD = new OracleCommand();
            myCMD.Connection = Oraclecon;
            myCMD.CommandText = sql;
            myCMD.CommandType = CommandType.Text;




            int count = Convert.ToInt32(myCMD.ExecuteScalar());

            if (count == 0)
                return false;
            else
                return true;
        }


    }
}
